Networks and distributed storage allow data and storage space to be shared between devices located anywhere a connection is available. These implementations may range from a single machine offering a shared drive over a home network to an enterprise-class cloud storage array with multiple copies of data distributed throughout the world. Larger implementations may incorporate Network Attached Storage (NAS) devices, Storage Area Network (SAN) devices, and other configurations of storage elements and controllers in order to provide data and manage its flow. Improvements in distributed storage have given rise to a cycle where applications demand increasing amounts of data delivered with reduced latency, greater reliability, and greater throughput. Building out the storage architecture to meet these expectations enables the next generation of applications, which is expected to bring even greater demand.
A primary concern when implementing and managing any storage system is ensuring that data transactions complete successfully. While modern hardware is increasingly reliable, device failures, network disruptions, power outages, and other service interruptions are inevitable. Typically, the risk of a glitch increases as the storage solution becomes more complicated. While redundancy can be used to simplify data recovery, redundancy adds expense and can hurt performance. Thus, even if a remote data center includes RAID′ed drives, regular backups, uninterruptible power supplies, and other features designed to protect stored data, transactions may still fail and performance may still not match that of a local drive. These concerns may lead users to over-rely on local storage, which may actually place data at greater risk of being lost.
In order to reliably provide current and future applications with sufficient data at acceptable speeds, a need exists for improvements in performance while maintaining transaction integrity. In particular, systems and methods for improved transaction caching have the potential to improve data access times while still allowing a system to recover lost transactions. Thus, while existing techniques for data transaction handling have been generally adequate, the techniques described herein provide improved performance and reliability.